/*
 * @Description: file content
 * @Author: ZeT1an
 * @Date: 2022-01-16 19:12:45
 * @LastEditors: ZeT1an
 * @LastEditTime: 2022-06-20 21:42:15
 * @LastEditContent: 
 */
/**
 * 不管什么编程语言，在代码执行过程中，都是需要给它分配内存的，2种形式。
 * 1.自动管理内存，如Java，JavaScript，Python，Swift，Dart。
 * 2.手动管理内存，如C, C++，早期的 OC，都是需要手动管理内存的申请和释放的。
 */

/**
 * 内存管理的生命周期，3步
 * 1.分配申请需要的内存。
 * 2.使用分配的内存（存放一些东西，比如对象）
 * 3.不需要使用时，对其进行释放。
 */

/**
 * JS为变量分配内存的2种方式
 * 1.JS对于基本数据类型的分配，会在执行时，直接在栈空间进行分配。
 * 2.JS对于复杂数据类型的分配，会在堆内存中开辟一块空间，并且将这块空间的指针返回值变量引用。
 */

/**
 * 垃圾回收器的英文名Garbage Collection，简称GC
 */

/**
 * 常见的GC算法2个，并介绍
 * 1.引用计数，（用于 OC,Swift）
 * 	当一个对象，有一个引用指向它时，那么这个对象的引用就+1，当一个对象的引用为0时，这个对象就可以被销毁掉。
 * 	这个算法有一个很大的弊端，就是会产生循环引用。
 * 2.标记清除（核心思想：可达性 Reachability）
 * 	这个算法是设置一个根对象（root object），垃圾回收器会定期从这个根开始，找所有从根开始有引用的对象，对于那些没有引用的对象，就认为是不可用的对象
 * 	这个算法可以很好解决循环引用的问题
 * 	JS引擎比较广泛的采用的就是标记清除的算法。当然类似于V8引擎为了进行更好的优化，它在算法的实现细节上也会结合一些其它的算法
 */